package com.student.work.utils;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @date 2020/3/7 16:40
 */
public class TimeUtils {

    /**
     * 获取当前的日期 yyyy-MM-dd 格式
     *
     * @return 当前日期
     */
    public static String getNowDay() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(new Date());
    }

    /**
     * 将Date时间，格式化成 yyyy-MM-dd HH:mm:dd
     *
     * @param date 日期
     * @return 格式化日期
     */
    public static String formatDate(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }

    /**
     * 将Date时间，格式化成 yyyy-MM-dd HH:mm:dd
     *
     * @param date 日期
     * @return 格式化日期
     */
    public static String formatDateStr(Object date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }

    /**
     * 将毫秒数，格式化成 yyyy-MM-dd HH:mm:dd
     *
     * @param millis 毫秒数
     * @return 格式化时间
     */
    public static String getDateFromMillis(long millis) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(millis);
        return sdf.format(calendar.getTime());
    }

    /**
     * 某个日期，1小时前的时间
     *
     * @param millis 日期的毫秒数
     * @return 1小时前的时间
     */
    public static String oneHourAgo(long millis) {
        long t = millis - 3600 * 1000L;
        return getDateFromMillis(t);
    }

    /**
     * 某个日期，24小时前的时间
     *
     * @param millis 日期的毫秒数
     * @return 24小时前的时间
     */
    public static String twoFourHourAgo(long millis) {
        long t = millis - 24 * 3600 * 1000L;
        return getDateFromMillis(t);
    }

    /**
     * 某个日期，7天前的时间
     *
     * @param millis 日期的毫秒数
     * @return 7天前的时间
     */
    public static String sevenDayAgo(long millis) {
        long t = millis - 7 * 24 * 3600 * 1000L;
        return getDateFromMillis(t);
    }

    /**
     * 某个日期，14天前的时间
     *
     * @param millis 日期的毫秒数
     * @return 14天前的时间
     */
    public static String fourteenDayAgo(long millis) {
        long t = millis - 14 * 24 * 3600 * 1000L;
        return getDateFromMillis(t);
    }

    /**
     * 某个日期，30天前的时间
     *
     * @param millis 日期的毫秒数
     * @return 30天前的时间
     */
    public static String thirtyDayAgo(long millis) {
        long t = millis - 30 * 24 * 3600 * 1000L;
        return getDateFromMillis(t);
    }

    /**
     * 两个日期相差的小时数
     *
     * @param start 开始时间
     * @param end   结束时间
     * @return 小时数
     */
    public static Double diffDate(Date start, Date end) {
        long diff = end.getTime() - start.getTime();
        double round = diff / 60d / 60 / 1000;
        BigDecimal b = new BigDecimal(round);
        return b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /**
     * 将字符串日期转成Date类型
     * @param date 字符串日期
     * @return Date日期
     */
    public static Date getDateByString(String date){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            return simpleDateFormat.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return new Date();
    }
}
